package main

import "fmt"

/*
使用“面向对象”的思维方式编写一个学生信息管理系统。
学生有id、姓名、年龄、分数等信息
程序提供展示学生列表、添加学生、编辑学生信息、删除学生等功能
*/
// Student 结构体表示学习信息
type Student struct {
	ID    int
	Name  string
	Age   int
	Score float64
}

// StudentManager  结构体表示学生管理器
type StudentManager struct {
	students []*Student
}

// 创建一个新的学生管理器
func NewStudentManager() *StudentManager {
	return &StudentManager{
		students: make([]*Student, 0),
	}
}

// ShowStudents 方法用于展示学生列表
func (sm *StudentManager) ShowStudents() {
	fmt.Println("学生列表：")
	for _, student := range sm.students {
		fmt.Printf("ID: %d, 姓名: %s，年龄：%d，分数：%.2f\n", student.ID, student.Name, student.Age, student.Score)
	}
}

// AddStudent 方法用于添加学生
func (sm *StudentManager) AddStudent(student *Student) {
	sm.students = append(sm.students, student)
	fmt.Println("添加学生成功！")
}

// EditStudent 方法用于编辑学生信息
func (sm *StudentManager) EditStudent(id int, name string, age int, score float64) {
	for _, student := range sm.students {
		if student.ID == id {
			student.Name = name
			student.Age = age
			student.Score = score
			fmt.Println("编辑学生信息成功！")
			return
		}
	}
	fmt.Println("未找到对应ID的学生")
}

// DeleteStudent 方法用于删除学生
func (sm *StudentManager) DeleteStudent(id int) {
	for i, student := range sm.students {
		if student.ID == id {
			sm.students = append(sm.students[:i], sm.students[i+1:]...)
			fmt.Println("删除学生成功")
			return
		}
	}
	fmt.Println("未找到对应ID的学生")
}

func main() {
	//  创建学生管理器
	manager := NewStudentManager()

	// 添加几个学生
	manager.AddStudent(&Student{ID: 1, Name: "张三", Age: 18, Score: 90.5})
	manager.AddStudent(&Student{ID: 2, Name: "李四", Age: 19, Score: 86.5})
	manager.AddStudent(&Student{ID: 3, Name: "王五", Age: 20, Score: 90.0})

	// 展示学生列表
	manager.ShowStudents()
	// 编辑学习信息
	manager.EditStudent(2, "李四", 21, 88.5)
	manager.ShowStudents()

	// 删除学生
	manager.DeleteStudent(3)
	manager.ShowStudents()
}
